<?php	
	/**
	 * Klass REGISTER CONTROLLER - Används för att admin ska kunna registrera en ny kund.
	 * Controllern bestämmer vad som ska skrivas ut till användaren genom att "prata" med vyn och handlern. 
	 */
	class RegisterController {
		
		private $validate = null;


		//----- FUNKTION: CONSTRUCT ---------------------------------------------------------------------------------------------------------------------
		/**
		* Konstruktor funktion som tilldelar objekt till den privata variabeln $validate.
		*/
		public function __construct(Validate $validate)
		{
			$this->validate = $validate;
		}
		

		//----- FUNKTION: DO REGISTER CONTROLL ----------------------------------------------------------------------------------------------------------
		/**
	 	* DoRegisterControll är till för att kontrollera vilket tillstånd användaren befinner sig i.
		* @param LoginHandler $loginHandler Innehåller ett Login Handler objekt.
		* @param RegisterHandler $registerHandler Innehåller ett Register Handler objekt.
		* @param RegisterView $registerView Innehåller ett Register View objekt.
		* @return string $returnstring innehåller den HTML-kod som ska skrivas ut till användaren.		
	 	*/
		public function DoRegisterControll(LoginHandler $loginHandler, RegisterHandler $registerHandler, RegisterView $registerView)
		{
			$returnstring = "";						
			
			// Kontrollerar om admin är inloggad.
			if($loginHandler->UserIsLoggedIn() && $loginHandler->UserIsAdmin()){
			
				$messageNumber = array();
				$messagesHTML = "";

				// Först kontrollerar vi om admin försöker registrera en ny kund.
				if ($registerView->TriedToRegister()) {
					
					// Hämtar ut informationen som admin har skrivit in i formuläret.
					$customername = $registerView->GetCustomerName();
					$onr = $registerView->GetOnr();
					$customertype = $registerView->GetCustomertype();
					
					$adress = $registerView->GetAdress();
					$postalcode = $registerView->GetPostalcode();
					$city = $registerView->GetCity();
					$phone = $registerView->GetPhone();
					$mail = $registerView->GetMail();
					
					$username = $registerView->GetUsername();
					$password = $registerView->GetPassword();
					$repeatPassword = $registerView->GetRepeatPassword();


					// ----------------------------------------------------------------------------------------------------------------------------------
					// Sedan sätter in den uthämtade informationen i respektive objekt.
					$customer = new Customer();
					$customer->customerTypeID = $customertype;
					$customer->name = $customername;
					$customer->organisationsId = $onr;
					
					$contactAdress = new Contact();
					$contactAdress->contactTypeID = 1;
					$contactAdress->contactValue = $adress . "," . $postalcode . " " . $city;
					
					$contactPhone = new Contact();
					$contactPhone->contactTypeID = 3;
					$contactPhone->contactValue = $phone;
					
					$contactMail = new Contact();
					$contactMail->contactTypeID = 2;
					$contactMail->contactValue = $mail;
					
					// Sist så skapar vi ett user-objekt med det nya customerID som vi fick när vi skapade en ny customer.
					$user = new User();
					$user->LoginName = $username;
					$user->LoginPassword = $password;
					$user->LoginAdmin = 0;
					
					
					// ----------------------------------------------------------------------------------------------------------------------------------
                    // Vi kontrollerar om användarnamnet redan är upptaget, annars skickar vi vidare all indata för validering.
                    if ($registerHandler->OccupiedUsername($username)) {
                    	$messageNumber[] = RegisterView::USERNAME_TAKEN;
                    } else {
                    	$messageNumber = $registerHandler->DataValidator($customername, $onr, $customertype, $adress, $postalcode, $city, $phone, $mail, $username, $password, $repeatPassword);
                    	
                    	// Om arrayen vi får tillbaka är tom så betyder det att vi inte har fått några fel (indatan klarade valideringen).
                    	if (empty($messageNumber)) {
                    		$messageNumber[] = RegisterView::REGISTRATION_IS_SUCCESSFUL;
                    		
                    		// Sätter in vår kund i databasen genom funktionen InsertCustomerToCustomerTable som ligger i vår registerHandler.
                    		$customerID = $registerHandler->InsertCustomerToCustomerTable($customer);
                    		
                    		// Vi sätter även in resterande infromation i databasen genom funktionen InsertCustomerInfoToContactTable som ligger i vår registerHandler.
                    		$contactAdress->customerID = $customerID;
							$contactAdress->contactID = $registerHandler->InsertCustomerInfoToContactTable($contactAdress);		
                    		
                    		$contactPhone->customerID = $customerID;
                    		$contactPhone->contactID = $registerHandler->InsertCustomerInfoToContactTable($contactPhone);
                    		
                    		$contactMail->customerID = $customerID;
                    		$contactMail->contactID = $registerHandler->InsertCustomerInfoToContactTable($contactMail);
                    		
                    		// Vi sätter även in det user-objekt vi skapade i vår databas genom metoden InsertCustomerToLoginTable som ligger i vår registerHandler.
                    		$user->CustomerID = $customerID;                    		
                    		$user->LoginID = $registerHandler->InsertCustomerToLoginTable($user);
                    	}
                    }
                    // Sorterar våra nummer(som representerar olika felmeddelanden). 
                    sort($messageNumber);
                    // Hämtar ut våra meddelanden i text format.
                    $messagesHTML = $registerView->MessageHolder($messageNumber);
				}
				$returnstring = $registerView->CreateRegisterForm($messagesHTML);
			}	

			// Annars skickar vi användaren till login-sidan (om hon/han är utloggad) eller till "Mina sidor" om en kund är inloggad.
			else {
				if ($loginHandler->UserIsLoggedIn()) {
					header("Location: myPages.php");
				} else {
					header("Location: ../login.php");
				}
			}					
			return $returnstring;
		}
	}	
?>